package org.rslai.autotest.core.page;

import org.openqa.selenium.By;

/**
 * Script处理方法
 * @author rslai
 */
public interface Script {

	/**
	 * 将指定js方法的内容替换（js方法覆盖）
	 * @param methodName js方法名
	 * @param methodContent 需要设置的方法内容
	 */
	public void setJsMethodContent(String methodName, String methodContent);

	/**
	 * 按照指定的js方法名返回其内容
	 * @param methodName js方法名
	 * @return 方法内容
	 */
	public String getJsMethodContent(String methodName);

	/**
	 * 高亮显示某元素
	 * @param by By
	 */
	public void highlight(By by);

	/**
	 * 使用js点击某链接
	 * @param text 链接中的文字，模糊匹配所以要输入足够信息
	 */
	public void clickLink(String text);

	/**
	 * 使用js点击某链接
	 * @param text 链接中的文字，模糊匹配所以要输入足够信息
	 * @param index 点击第几个元素（从0开始，如果按text匹配到多个链接设置此参数）
	 */
	public void clickLink(String text, int index);

	/**
	 * 执行脚本
	 * @param script 要执行的js脚本
	 * @param args 参数，可选
	 * @return 执行脚本返回的内容（js脚本的返回值）
	 */
	public Object executeScript(String script, Object... args);

	/**
	 * 执行异步脚本
	 * @param script 要执行的js脚本
	 * @param args 参数，可选
	 * @return 执行脚本返回的内容（js脚本的返回值）
	 */
	public Object executeAsyncScript(String script, Object... args);

	/**
	 * 等待js执行返回true
	 * @param script 要执行的js脚本
	 * @param args 参数，可选
	 */
	public void waitForCondition(String script, Object... args);

	/**
	 * 等待js执行返回true
	 * @param script 要执行的js脚本
	 * @param timeout 超时时间，0为默认超时时间
	 * @param args 参数，可选
	 */
	public void waitForCondition(String script, int timeout, Object... args);

	/**
	 * 等待Ajax-jQuery执行完成
	 * @param args 参数，可选
	 */
	public void waitForJQueryCompleted(Object... args);

	/**
	 * 等待Ajax-jQuery执行完成
	 * @param timeout 超时时间
	 * @param args 参数，可选
	 */
	public void waitForJQueryCompleted(int timeout, Object... args);

	/**
	 * 等待Ajax-Prototype执行完成
	 * @param args 参数，可选
	 */
	public void waitForPrototypeCompleted(Object... args);

	/**
	 * 等待Ajax-Prototype执行完成
	 * @param timeout 超时时间
	 * @param args 参数，可选
	 */
	public void waitForPrototypeCompleted(int timeout, Object... args);

	/**
	 * 等待Ajax-Dojo执行完成
	 * @param args 参数，可选
	 */
	public void waitForDojoCompleted(Object... args);

	/**
	 * 等待Ajax-Dojo执行完成
	 * @param timeout 超时时间
	 * @param args 参数，可选
	 */
	public void waitForDojoCompleted(int timeout, Object... args);

}
